package com.leo.dao;

import java.util.List;

public interface Dao {

	/**
	 * 增
	 * 
	 * @param entity
	 */
	public void save(Object entity);

	/**
	 * 改
	 * 
	 * @param entity
	 */
	public void update(Object entity) ;

	/**
	 * 删
	 * 
	 * @param entity
	 */
	public void delete(Object entity) ;

	/**
	 * 查
	 * 
	 * @param entityClass
	 * @param id
	 * @return
	 */
	public <T> T findById(Class<T> entityClass, Object id) ;
	
	/**
	 * @param entity
	 * execute update when entity alredy exist,otherwise save entity
	 */
	public void updateOrSave(Object entity);

	/**
	 * 条件查询单个对象
	 * 
	 * @param entityClass
	 * @param whereSQL
	 * @param whereParams
	 * @return
	 */
	public <T> T find(Class<T> entityClass, String whereSQL,
			Object ... whereParams);
	
	/**
	 * 条件查询全部对象
	 * 
	 * @param entityClass
	 * @param whereSQL
	 * @param whereParams
	 * @return
	 */
	public <T> List<T> findAll(Class<T> entityClass, String whereSQL,
			Object ... whereParams);

	/**
	 * 条件查询多个对象
	 * 
	 * @param entityClass
	 * @param whereSQL
	 * @param whereParams
	 * @param maxResult 对象最大个数，-1为无限制
	 * @return
	 */
//	public <T> List<T> findAll(Class<T> entityClass, String whereSQL,
//			Object[] whereParams, int maxResult);
	
	public <T> List excuteQuery(String HQL,
			Object ... whereParams) ;

	public <T> List excuteQuery(String HQL, final int maxResult,
			Object ... whereParams);

	/**
	 * 删除所有key字段在Params集合内的数据
	 * @param entityClass
	 * @param key 
	 * @param whereParams
	 */

	public <T> void delete(Class<T> entityClass, String key,
			Object ... Params);

	/**
	 * 分页查询
	 * 
	 * @param entityClass
	 * @param whereSQL
	 * @param whereParams
	 * @param page 页号
	 * @param rows 每页最大行数
	 * @return
	 */
	public <T> List<T> getScrollData(Class<T> entityClass,
			String whereSQL,int page
			, int rows, Object ... whereParams);

	public <T> long getDataCount(Class<T> entityClass, String whereSQL,
			Object ... whereParams);

	/**
	 * 根据实体获取实体类名
	 * 
	 * @param <T>
	 * @param entityClass
	 * @return
	 */
	public <T> String getEntityName(Class<T> entityClass);

	public <T> List<T> findAll(Class<T> entityClass, String whereSQL, int maxResult,
			Object ... whereParams);
	
}
